package dao.mysql;

import dal.Conexion;
import dao.TerminalDao;
import dto.Terminal;
import java.sql.ResultSet;
import java.util.Vector;
import org.apache.log4j.Logger;

/**
 *
 * @author josepy
 */
public class TerminalDaoMySQL extends TerminalDao{

    private static Logger log = Logger.getLogger(TerminalDaoMySQL.class);

    @Override
    public void update() throws Exception {
        Conexion objConexion = Conexion.getOrCreate();
        StringBuffer query = new StringBuffer("SELECT FN_UPDATE_TERMINALES(");
        query.append(objDto.getId()).append(",'");
        query.append(objDto.getNombreTerminal()).append("',");
        query.append(objDto.getCapacidadAbastecimiento()).append(",");
        query.append(objDto.getIdConcurrencia()).append(") AS ID");
        log.debug(query.toString());
        ResultSet objResultSet = objConexion.ejecutar(query.toString());
        objResultSet.next();
        int id = objResultSet.getInt("ID");
        if(id > 0)
            objDto.setId(id);
        else{
            objConexion.desconectar();
            throw new Exception();
        }
        objConexion.desconectar();
    }

    @Override
    public void delete() throws Exception {
        Conexion objConexion = Conexion.getOrCreate();
        try {
            StringBuffer query = new StringBuffer("SELECT FN_DELETE_TERMINAL(");
            query.append(this.objDto.getId()).append(",");
            query.append(this.objDto.getIdConcurrencia()).append(") AS ROWS");
            ResultSet objResultSet = objConexion.ejecutar(query.toString());
            objResultSet.next();
            int id = objResultSet.getInt("ROWS");
            if(id > 0)
                objDto.setId(id);
            else{
                objConexion.desconectar();
                throw new Exception();
            }
            objConexion.desconectar();
        } catch (Exception e) {
        }
    }

    @Override
    public Terminal select(int id) {
        Conexion objConexion = Conexion.getOrCreate();
        try {
            String query = "SELECT * FROM tbl_terminales WHERE id ="+id;
            ResultSet objResultSet = objConexion.ejecutar(query);

            if(objResultSet.next()){
                id = objResultSet.getInt("ID");
                String nombreTerminal = objResultSet.getString("NOMBRE_TERMINAL");
                double capacidadAbastecimiento = objResultSet.getDouble("CAPACIDAD_ABASTECIMIENTO");
                int idConcurrencia = objResultSet.getInt("ID_CONCURRENCIA");

                Terminal objTerminal = new Terminal();
                objTerminal.setId(id);
                objTerminal.setNombreTerminal(nombreTerminal);
                objTerminal.setCapacidadAbastecimiento(capacidadAbastecimiento);
                objTerminal.setIdConcurrencia(idConcurrencia);

                return objTerminal;
            }
        } catch (Exception e) {
        }

        return null;
    }

    @Override
    public Vector<Terminal> selectTodos() {
        Conexion objConexion = Conexion.getOrCreate();
        Vector<Terminal> objVector = new Vector<Terminal>();
        try {
            String query = "SELECT * FROM tbl_terminales";
            ResultSet objResultSet = objConexion.ejecutar(query);

            while(objResultSet.next()){
                int id = objResultSet.getInt("ID");
                String nombreTerminal = objResultSet.getString("NOMBRE_TERMINAL");
                double capacidadAbastecimiento = objResultSet.getDouble("CAPACIDAD_ABASTECIMIENTO");
                int idConcurrencia = objResultSet.getInt("ID_CONCURRENCIA");

                Terminal objTerminal = new Terminal();
                objTerminal.setId(id);
                objTerminal.setNombreTerminal(nombreTerminal);
                objTerminal.setCapacidadAbastecimiento(capacidadAbastecimiento);
                objTerminal.setIdConcurrencia(idConcurrencia);

                objVector.addElement(objTerminal);
            }
        } catch (Exception e) {
        }

        return objVector;
    }

    public Vector<Terminal> selectTodos(int id,boolean conRutas){
        Conexion objConexion = Conexion.getOrCreate();
        Vector<Terminal> objVector = new Vector<Terminal>();
        try {
            String query = "SELECT * FROM tbl_terminales WHERE ID<>"+id;
            if(!conRutas)
                query += " AND id NOT IN (SELECT ID_DESTINO FROM TBL_rutas WHERE ID_ORIGEN="+id+")";

            ResultSet objResultSet = objConexion.ejecutar(query);

            while(objResultSet.next()){
                id = objResultSet.getInt("ID");
                String nombreTerminal = objResultSet.getString("NOMBRE_TERMINAL");
                double capacidadAbastecimiento = objResultSet.getDouble("CAPACIDAD_ABASTECIMIENTO");
                int idConcurrencia = objResultSet.getInt("ID_CONCURRENCIA");

                Terminal objTerminal = new Terminal();
                objTerminal.setId(id);
                objTerminal.setNombreTerminal(nombreTerminal);
                objTerminal.setCapacidadAbastecimiento(capacidadAbastecimiento);
                objTerminal.setIdConcurrencia(idConcurrencia);

                objVector.addElement(objTerminal);
            }
        } catch (Exception e) {
        }

        return objVector;
    }

}
